@import '../colors.module.css';
@import '../variables.module.css';
@import './config.module.css';

.input {
  padding: var(--input-padding) 0;
  position: relative;

  @apply --reset;

  &.withIcon {
    margin-left: calc(var(--input-icon-size) + var(--input-icon-right-space));
  }
}

.icon {
  color: var(--input-text-label-color);
  display: block;
  font-size: var(--input-icon-font-size) !important;
  height: var(--input-icon-size);
  left: calc(-1 * (var(--input-icon-size) + var(--input-icon-right-space)));
  line-height: var(--input-icon-size) !important;
  position: absolute;
  text-align: center;
  top: var(--input-icon-offset);
  transition: color var(--animation-duration) var(--animation-curve-default);
  width: var(--input-icon-size);
}

.counter {
  color: var(--input-text-label-color);
  position: absolute;
  right: 0;
}

.counter,
.error {
  color: var(--input-text-error-color);
  font-size: var(--input-label-font-size);
  line-height: var(--input-underline-height);
  margin-bottom: calc(-1 * var(--input-underline-height));
}

.hint {
  color: var(--input-text-label-color);
  font-size: var(--input-field-font-size);
  left: 0;
  line-height: var(--input-field-font-size);
  opacity: var(--input-hint-opacity);
  pointer-events: none;
  position: absolute;
  top: calc(var(--input-padding) + 1.5 * var(--input-field-padding));
  transition-duration: var(--animation-duration);
  transition-property: opacity;
  transition-timing-function: var(--animation-curve-default);
}

.label {
  color: var(--input-text-label-color);
  font-size: var(--input-field-font-size);
  left: 0;
  line-height: var(--input-field-font-size);
  pointer-events: none;
  position: absolute;
  top: calc(var(--input-padding) + 1.5 * var(--input-field-padding));
  transition-duration: var(--animation-duration);
  transition-property: top, font-size, color;
  transition-timing-function: var(--animation-curve-default);

  &.fixed ~ .hint {
    display: none;
  }
}

.bar {
  display: block;
  position: relative;
  width: 100%;

  &::before,
  &::after {
    background-color: var(--input-text-highlight-color);
    bottom: 0;
    content: '';
    height: 2px;
    position: absolute;
    transition-duration: 0.2s;
    transition-property: width, background-color;
    transition-timing-function: var(--animation-curve-default);
    width: 0;
  }

  &::before {
    left: 50%;
  }

  &::after {
    right: 50%;
  }
}

.hidden {
  display: none;
}

.errored {
  padding-bottom: 0;

  & > .inputElement {
    border-bottom-color: var(--input-text-error-color);
    margin-top: 1px;
  }

  & > .counter,
  & > .label {
    color: var(--input-text-error-color);
  }

  & > .label > .required {
    color: var(--input-text-required-color);
  }
}

.disabled > .inputElement {
  border-bottom-style: dashed;
  color: var(--input-text-disabled-text-color);
}

/* stylelint-disable */
.inputElement {
  background-color: var(--input-text-background-color);
  border-bottom: 1px solid var(--input-text-bottom-border-color);
  border-left: 0;
  border-radius: 0;
  border-right: 0;
  border-top: 0;
  color: var(--input-text-input-element-color);
  display: block;
  font-size: var(--input-field-font-size);
  outline: none;
  padding: var(--input-field-padding) 0;
  width: 100%;

  &:required {
    box-shadow: none;
  }

  &.filled ~ .hint,
  &.filled ~ .label.fixed {
    display: none;
  }

  &.filled,
  &[type='date'],
  &[type='time'],
  &:focus:not([disabled]):not([readonly]) {
    & ~ .label:not(.fixed) {
      font-size: var(--input-label-font-size);
      top: var(--input-focus-label-top);
    }
  }

  &:focus:not([disabled]):not([readonly]) {
    & ~ .bar::before,
    & ~ .bar::after {
      width: 50%;
    }

    & ~ .label:not(.fixed) {
      color: var(--input-text-highlight-color);
    }

    & ~ .label > .required {
      color: var(--input-text-required-color);
    }

    & ~ .hint {
      display: block;
      opacity: var(--input-hint-opacity);
    }

    & ~ .icon {
      color: var(--input-text-highlight-color);
    }

    &.filled ~ .hint {
      opacity: 0;
    }
  }
}
